package com.waterworld.watch.common.net;

import com.waterworld.watch.common.bean.*;
import com.waterworld.watch.home.bean.RoleBean;

import java.io.File;

import okhttp3.ResponseBody;
import rx.Subscriber;


/**
 * Created by nhuan
 * Time:2018/12/14.
 */

public interface INetManager {
    /**
     * 获取验证码
     */
    void getAuthCode(String phone, String type, Subscriber<BaseResultBean<String>> subscriber);

    /**
     * 注册
     */
    void register(String phone, String pwd, String authCode, Subscriber<BaseResultBean> subscriber);

    /**
     * 登录
     */
    void login(String phone, String type, String pwd,Subscriber<BaseResultBean<String>> subscriber);

    /**
     * 忘记密码
     */
    void forgetPwd(String phone, String pwd, String authCode, Subscriber<BaseResultBean> subscriber);

    /**
     * 修改密码
     */
    void modifyPwd(String newPwd, String oldPwd, Subscriber<BaseResultBean> subscriber);

    /**
     * 修改手机号
     */
    void modifyPhone(String newPhone, String authCode, String pwd, Subscriber<BaseResultBean> subscriber);

    /**
     * 头像上传
     */
    void uploadImg(File file, Subscriber<BaseResultBean<String>> subscriber);

    /**
     * 修改用户信息
     */
    void modifyUserInfo(String head, String name, String relationWithBaby, Subscriber<BaseResultBean> subscriber);

    /**
     * 获取用户信息
     */
    void getCurrentUser(Subscriber<BaseResultBean<UserInfoBean>> subscriber);

    /**
     * 退出系统
     */
    void logout(Subscriber<BaseResultBean> subscriber);

    /**
     * 检查imei
     */
    void checkImei(String imei,Subscriber<BaseResultBean> subscriber);

    /**
     * 绑定手表
     */
    void bindWatch(String imei, String relationWithBaby,String head,String name,Integer sex,String birthday,String grade,String classes,String height,String weight, String phone,Subscriber<BaseResultBean<RoleBean>> subscriber);

    /**
     * 保存或更新手表用户
     */
    void saveWatchUserInfo(String head,String name,Integer sex,String birthday,String grade,String classes,String height,String weight, String phone,Subscriber<BaseResultBean> subscriber);

    /**
     * 切换手表
     */
    void switchWatch(Integer watchId, Subscriber<BaseResultBean> subscriber);

    /**
     * 获取当前手表用户信息
     */
    void getCurrentWatchUserInfo(Subscriber<BaseResultBean<WatchUserInfoBean>> subscriber);

    /**
     * 获取用户绑定手表列表
     */
    void listBindWatch(Subscriber<BaseResultBean<BindWatchBean[]>> subscriber);

    /**
     * 获取绑定该手表的用户列表
     */
    void listBindWatchUser(Subscriber<BaseResultBean<BindWatchUserBean[]>> subscriber);

    /**
     * 移交管理权限
     */
    void transferAuthority(Integer authorizeeUserId, Subscriber<BaseResultBean> subscriber);

    /**
     * 解除绑定（自身或其他用户）
     * 被解绑用户标识；不传默认解绑自身
     */
    void unbindWatch(Integer unbundlingUserId, Subscriber<BaseResultBean> subscriber);

    /**
     * 恢复出厂设置
     */
    void resumeFactory(Subscriber<BaseResultBean> subscriber);

    /**
     * 编辑主页功能区
     */
    void editHomePagerFunction(String functionSigns,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取所有功能
     */
    void getAllFunction(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取未应用的功能
     */
    void getNotUseFunction(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取手表通讯录
     */
    void listAddressBook(Subscriber<BaseResultBean> subscriber);

    /**
     * 上传手表通讯录
     */
    void uploadAddressBook(String addressBook, Subscriber<BaseResultBean> subscriber);

    /**
     * 更新贴心设置
     */
    void updateIntimateSet(Boolean isReservePower,Boolean isPowerSaving,Boolean isCallPosition,Boolean isAutoAnswer,
                           Boolean isShieldStrangeCall,Boolean isAutoBoot,Boolean isAutoShutdown,Boolean isNoShutdown	,
                           Boolean isEnableVolte,String bootTime,String shutdownTime,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取贴心设置
     */
    void getIntimateSet(Subscriber<BaseResultBean> subscriber);

    /**
     * 远程关机
     */
    void remoteShutdown(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取课程表
     */
    void getCourse(Subscriber<BaseResultBean> subscriber);

    /**
     * 上传课程表
     */
    void uploadCourse(String course,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取位置
     */
    void getLocation(Subscriber<BaseResultBean<LocationBean>> subscriber);

    /**
     * 获取最后位置
     */
    void getLastLocation(Subscriber<BaseResultBean<LocationBean>> subscriber);

    /**
     * 获取安全围栏列表
     */
    void getSecurityFence(Integer pageNum,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 添加围栏
     */
    void addSecurityFence(String name,Integer remindWay,Integer fenceRange,String remindTime,String remindDays,String fenceLat,String fenceLng,Subscriber<BaseResultBean> subscriber);

    /**
     * 更新安全围栏
     */
    void updateSecurityFence(Integer id,String name,Integer remindWay,Integer fenceRange,String remindTime,String remindDays,String fenceLat,String fenceLng,Subscriber<BaseResultBean> subscriber);

    /**
     * 启用/关闭安全围栏
     */
    void isEnableSecurityFence(Integer id,Boolean isEnable,Subscriber<BaseResultBean> subscriber);

    /**
     * 删除安全围栏
     */
    void deleteSecurityFence(Integer id,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取轨迹信息
     */
    void getTrack(String date,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取运动统计
     */
    void getSportsCount(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取运动统计
     */
    void getLastSportsCount(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取群列表
     * @param subscriber
     */
    void listGroup(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取用户管理手表列表
     * @param subscriber
     */
    void listManageWatch(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取群允许添加的用户
     * @param watchId
     * @param subscriber
     */
    void listGroupAllowUser(Integer watchId,Subscriber<BaseResultBean> subscriber);

    /**
     * 上传群头像
     * @param file
     * @param subscriber
     */
    void uploadGroupHead(File file,Subscriber<BaseResultBean> subscriber);

    /**
     * 创建群
     * @param json
     * @param subscriber
     */
    void createGroup(String json,Subscriber<BaseResultBean> subscriber);

    /**
     * 删除群
     */
    void deleteGroup(Integer groupId,Subscriber<BaseResultBean> subscriber);

    /**
     * 修改群名称
     */
    void updateGroupName(Integer groupId,String name,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取群成员列表
     */
    void listGroupMember(Integer groupId,Subscriber<BaseResultBean> subscriber);

    /**
     * 添加群成员
     */
    void addGroupMember(String json,Subscriber<BaseResultBean> subscriber);

    /**
     * 删除群成员
     */
    void deleteGroupMember(String json,Subscriber<BaseResultBean> subscriber);

    /**
     * 退群
     */
    void quitGroup(Integer groupId,Subscriber<BaseResultBean> subscriber);

    /**
     * 发送群消息
     */
    void sendGroupMsg(String json,Subscriber<BaseResultBean> subscriber);

    /**
     * 上传群语音
     */
    void uploadGroupVoice(Integer groupId,File file,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取群最新消息
     */
    void getGroupMsg(Integer groupId,Integer msgId,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取群历史消息
     */
    void listGroupMsg(Integer groupId,Integer msgId,Integer pageNum,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 远程拍摄
     */
    void remotePhoto(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取照片
     */
    void listPhoto(Integer pageNum,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 删除照片
     */
    void deletePhoto(String ids,Subscriber<BaseResultBean> subscriber);

    /**
     * 单向聆听
     */
    void oneWayListening(Subscriber<BaseResultBean> subscriber);

    /**
     * 获取日程列表
     */
    void listSchedule(Integer pageNum,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 添加日程
     */
    void addSchedule(String remindTime,Integer remindType ,String remindDays,String remindContent,Subscriber<BaseResultBean> subscriber);

    /**
     * 更新日程
     */
    void updateSchedule(Integer id,String remindTime,Integer remindType,String remindDays,String remindContent,Subscriber<BaseResultBean> subscriber);

    /**
     * 是否启用日程
     */
    void isEnableSchedule(Integer id,Boolean isEnable,Subscriber<BaseResultBean> subscriber);

    /**
     * 删除日程
     */
    void deleteSchedule(Integer id,Subscriber<BaseResultBean> subscriber);

    /**
     * 获取消息通知
     */
    void getMessage(Integer pageNum,Integer pageSize,Subscriber<BaseResultBean> subscriber);

    /**
     * 同意绑定
     */
    void agreeBindWatch(Integer msgId,Subscriber<BaseResultBean> subscriber);

    /**
     * 单向聆听用户
     */
    void listOneWayListeningUser(Subscriber<BaseResultBean> subscriber);

    void getMessageGroup(Subscriber<BaseResultBean<NotificationCategoryBean[]>> subscriber);

    void listMessage(Integer pageNum,Integer pageSize,Integer msgId,Integer groupId,Subscriber<BaseResultBean<NotificationDetailBean[]>> subscriber);

}
